<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>函数参数作用域</title>
  </head>
  <body>
    <p>如果函数参数有默认值，则参数会有一个单独的作用域</p>
    <pre>
      let x=1;
      function f(x,y=x){   //y的默认值是参数x
        console.log(y)
      }
        f(2); // 2
    let a=1;
      function fun(y=a){   // y的默认值指向参数a，但是参数表内没有定义，所以使用外部a的值
        let a=2;
        console.log(y)
      } 
     fun()  // 1

        let foo = 'outer' ;
         function bar(func = x => foo) {  // 参数func的值是一个匿名函数，该匿名函数返回变量foo
                                          // 参数作用域内没有定义变量，所以取外层的值
        let foo = 'inner'  ;
        console.log(func());
         bar(); // outer
    </pre>
  </body>
</html>
<script>
  let x = 1;
  function f(x, y = x) {
    console.log(y);
  }
  f(2); // 2
  let a = 1;
  function fun(y = a) {
    let a = 2;
    console.log(y);
  }
  fun(); // 1

  let foo = "outer";
  function bar(func = (x) => foo) {
    let foo = "inner";
    console.log(func());
  }

  bar(); // outers
</script>
